Hiperparametros y Modelos de Validación

Python
Machine Learning
Autor/a

Joel Burbano

Fecha de publicación

17 de diciembre de 2023

Representación de la data en Scikit-Learn

Machine Learning se trata de crear models desde los datos: por esta razón es necesario entender como se representa la data en una computadora. En nuestro caso particular con Scikit-Learn la manera de tratar la data es como una tabla.

Datos como tabla

Una tabla basica es un arreglo bi-dimensional de datos, en donde cada fila representa un elemento individual del conjunto de datos, y cada columna representa cantidades realacionadas con cada uno de estos elementos.

Por ejemplo la ya conocidada base iris

Código
import seaborn as sb
iris=sb.load_dataset('iris')
iris.head()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa

Aquí, cada fila de la data se refiere a la observación de una flor, y el numero de filas es el total de flores observadas.

Matriz de caracteristicas (Features matrix)

Esta tabla contienene la información caracteeristica del conjunto de datos en nuestro ejemplo contiene información de flores. Matemáticamente estas caracteristicas pasan a representar las variables independientes de nuestro conjunto de datos generalmente denotado por \(X\)

Objetivo (Target Array)

Es un arraglo que matemáticamente representa la variable dependiente generalmente notada por \(y\)

Código
import matplotlib.pyplot as plt
Código
#plt.figure(figsize=(12,8))
sb.set()
sb.pairplot(iris,hue='species',size=1.5)
C:\Users\JXBS\AppData\Local\Programs\Python\Python312\Lib\site-packages\seaborn\axisgrid.py:2100: UserWarning: The `size` parameter has been renamed to `height`; please update your code.
  warnings.warn(msg, UserWarning)

Para usar los datos en Scikit-Learn, tenemos que extraer los matriz \(X\) y el objetivo \(y\)

Código
X_iris=iris.drop('species',axis=1)
print(X_iris.shape)
y_iris=iris['species']
print(y_iris.shape)
(150, 4)
(150,)

Scikit-Learn’s API estimador

La API de Scikit-Learn esta diseñada con los siguientes principios en mente

  • Coherencia.- Todos los objetos comparten unaa interfaz común extraida de un conunto limitado de métodos, con documentación consistente.

  • Inspección Todos los valores de parámetros especificados se exponen como atributos públicos. Jerarquía de objetos limitada Sólo los algoritmos están representados por clases de Python; los conjuntos de datos se representan en formatos estándar (matrices NumPy, Pandas DataFrames, matrices dispersas de SciPy) y los nombres de los parámetros utilizan cadenas estándar de Python.

  • Composición Muchas tareas de aprendizaje automático se pueden expresar como secuencias de algoritmos más fundamentales, y ScikitLearn hace uso de esto siempre que es posible.

  • Valores predeterminados sensatos Cuando los modelos requieren parámetros especificados por el usuario, la biblioteca define un valor predeterminado apropiado.

Básicos de la API

Por lo general, los pasos para usar la API del estimador Scikit-Learn son los siguientes (repasaremos algunos ejemplos detallados en las secciones siguientes):

  1. Elija una clase de modelo importando la clase de estimador adecuada de ScikitLearn.

  2. Elija los hiperparámetros del modelo creando una instancia de esta clase con los valores deseados.

  3. Organice los datos en una matriz de características y un vector objetivo siguiendo la discusión anterior.

  4. Ajuste el modelo a sus datos llamando al método fit() de la instancia del modelo.

  5. Aplique el modelo a nuevos datos:

• Para el aprendizaje supervisado, a menudo predecimos etiquetas para datos desconocidos usando el método predict().

• Para el aprendizaje no supervisado, a menudo transformamos o inferimos propiedades de los datos utilizando el método transform() o predict().

Ejemplo De Aprendizaje Supervisado: Regresión Lineal Simple

Código
import numpy as np
Código
rng=np.random.RandomState(42)
x=10+rng.rand(50)
y=2*x-1+rng.rand(50)
plt.scatter(x,y)
<matplotlib.collections.PathCollection at 0x1e7115f3c20>

  1. Escojemos el modelo
Código
from sklearn.linear_model import LinearRegression
  1. Escogemos los hiperparametros
Código
model=LinearRegression(fit_intercept=True)
model
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
  1. Organizando los datos en variables independientes y variable dependiente
Código
X=x[:,np.newaxis]
X.shape
(50, 1)
  1. Ajustando el modelo
Código
model.fit(X,y)
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Código
model.coef_
array([2.06607665])
Código
model.intercept_
-1.1957940680607742
  1. Predicciendo data desconocida
Código
xfit=np.linspace(-1,11)
Código
Xfit=xfit[:,np.newaxis]
yfit=model.predict(Xfit)
Código
plt.scatter(x,y)
plt.plot(xfit,yfit)